Описание
Сохраняет содержимое буфера копирования в обновляемом объекте
Recordset.
наборЗаписей.Update (тип, режим )
Параметры
наборЗаписей
Объектная переменная, представляющая
открытый обновляемый объект Recordset.
тип
Необязательный.
Константа, задающая тип обновления (только в рабочей области
ODBCDirect).
dbUpdateRegular По умолчанию. Предстоящие изменения не помещаются в буфер и записываются на диск немедленно. dbUpdateBatch Запись на диск всех предстоящих изменений из буфера обновления. dbUpdateCurrentRecord Запись на диск только предстоящих изменений текущей записи.
режим
Необязательный. Значение типа Boolean, указывающее,
следует ли принудительно обновлять базу данных, вне зависимости от изменения
другим пользователем данных в базовых источниках после вызова методов
AddNew, Delete или Edit>. При значении True
изменения заносятся, и все изменения, внесенные другим пользователем,
переписываются. При значении False (по умолчанию) изменения, внесенные
другим пользователем за время ожидания обновления, приведут к невозможности
занесения изменений, конфликтующих с уже внесенными изменениями. Ошибка при этом
не возникает, а в свойствах BatchCollisionCount и BatchCollisions
будут записаны число конфликтующих записей и сами записи, соответственно (только
в рабочей области ODBCDirect).
Замечания
Метод Update применяется для сохранения текущей записи и
всех внесенных в нее изменений.
Внесенные в текущую запись изменения теряются
в следующих случаях:
1. Вызван метод Edit или AddNew, а затем
осуществлен переход к другой записи без вызова метода Update.
2.
Вызван метод Edit или AddNew, после чего метод Edit или
AddNew вызывается снова без вызова метода Update.
3. В значении
свойства Bookmark указывается другая запись.
4. Набор записей,
указанный в аргументе наборЗаписей, закрывается без вызова метода
Update.
5. Пользователь отменяет сеанс редактирования, заданный в
методе Edit, вызвав метод CancelUpdate.
Для внесения изменений
в запись следует сначала скопировать содержимое текущей записи в буфер
копирования с помощью метода Edit. Если метод Edit не будет вызван
первым, то попытка изменить значение поля или вызвать метод Update
приведет к ошибке.
В рабочей области ODBCDirect можно выполнить
пакетные обновления, если библиотека указателей набора записей поддерживает
пакетные обновления, а объект Recordset был открыт с параметром пакетного
обновления с нежесткой блокировкой.
В рабочей области ядра Microsoft
Jet, когда в многопользовательской среде свойство LockEdits объекта
Recordset имеет значение True(жесткая блокировка), запись остается
заблокированной с момента вызова метода Edit до отмены изменения или до
обновления записи с помощью метода Update. Если свойство LockEdits
имеет значение False(нежесткая блокировка), запись блокируется и
сравнивается с исходной версией записи только непосредственно перед ее
обновлением в базе данных. Если запись была изменена после вызова метода
Edit, выполнить операцию Update невозможно. При подключении ядра
Microsoft Jet к базе данных ODBC или базе данных ISAM
всегда используется нежесткая блокировка. Для продолжения операции обновления
следует снова вызвать метод Update. Для возвращения к записи, измененной
другим пользователем, следует выполнить инструкцию Move 0.
Для
добавления, изменения или удаления записи необходимо, чтобы запись имела
уникальный индекс в базовом источнике данных. В противном случае возникает
ошибка «Отсутствие разрешения» при вызове метода AddNew, Delete
или Edit в рабочей области Microsoft Jet или ошибка «Недопустимый
аргумент» при вызове метода Update в рабочей области
ODBCDirect.
Пример
Следующая программа демонстрирует совместное применение методов
Update и Edit.
Sub UpdateX() Dim dbsNorthwind As Database Dim rstEmployees As Recordset Dim strOldFirst As String Dim strOldLast As String Dim strMessage As String Set dbsNorthwind = OpenDatabase("Борей.mdb") Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники") With rstEmployees .Edit ' Сохраняет исходные данные. strOldFirst = !Имя strOldLast = !Фамилия ' Изменяет данные в буфере редактирования. !Имя = "Вова" !Фамилия = "Сидоров" ' Отображает содержимое буфера и принимает введенные данные. strMessage = "Режим редактирования:" & vbCr & " Исходные данные = " & strOldFirst & " " & _ strOldLast & vbCr & " Данные в буфере = " & !Имя & " " & !Фамилия & vbCr & vbCr & _ "Вызвать Update для замены в объекте Recordset " & "исходных данных на данные из буфера?" If MsgBox(strMessage, vbYesNo) = vbYes Then .Update Else .CancelUpdate End If ' Отображает результаты. MsgBox "Содержимое набора записей = " & !Имя & " " & !Фамилия ' Восстанавливает исходные данные, так как изменения ' внесены только для демонстрации. If Not (strOldFirst = !Имя And strOldLast = !Фамилия) Then .Edit !Имя = strOldFirst !Фамилия = strOldLast .Update End If .Close End With dbsNorthwind.Close End Sub